import axios from 'axios'

// 
// 自定义配置新建一个 axios 实例
const instance = axios.create({
    // `baseURL` 将自动加在 `url` 前面，除非 `url` 是一个绝对 URL。
    // 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
    // baseURL: 'http://kumanxuan1.f3322.net:8881/cms',
    // 配置代理服务器,访问代理服务器，代理服务器再匹配有 /api 的地址转换为真实地址 （target）
    baseURL: "/api"

    // `timeout` 指定请求超时的毫秒数(0 表示无超时时间)
    // 如果请求话费了超过 `timeout` 的时间，请求将被中断，不设置也有默认的
    // timeout: 1000, 

    // `headers` 是即将被发送的自定义请求头
    // headers: { 'X-Custom-Header': 'token' }  // !!!实例只会创建一次，刚开始没登录，没有登录状态，以后获取到的 token 都是空👎；所以才在请求头携带 token
});

// 添加请求拦截器
instance.interceptors.request.use(function (config) {
    console.log('请求拦截器拦截了，每一次发起请求前，都会先执行这里的代码', config);
    // 在发送请求之前做些什么
    const token = localStorage.getItem('x-auth-token')
    // 在请求之前判断是否有 token，有 token 就携带 token，用于请求要登录权限的请求
    if (token) config.headers['x-auth-token'] = token;
    // 因为接口要的请求头格式是 'x-auth-token'  所以才写这个变量名写法： headers['x-auth-token']
    return config;  // 配置对象是 axios 整个对象，包含 请求路径 baseURL，不返回就没有域名请求
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject("接收request异常", error);
});

// 添加响应拦截器
instance.interceptors.response.use((response) => {
    console.log('--响应拦截器拦截了，每一次发起请求前，都会先执行这里的代码--');
    // 对响应数据做点什么
    // 条件间用 || 只要一个条件成立了，就会执行 alert(),达不到过滤出  0、400、407 能发的效果
    if (response.data.code != 0 && response.data.code != 400 && response.data.code != 407) return alert("!! 提示：" + response.data.message)
    return response.data;
}, (error) => {
    // 对响应错误做点什么
    return Promise.reject(error);
});

export default instance;